package m.jclecai.com.view.klpk;

import android.content.Context;
import android.util.AttributeSet;
import android.view.View;
import android.widget.FrameLayout;
import android.widget.ImageView;
import android.widget.TextView;


import java.util.List;

import m.jclecai.com.R;
import m.jclecai.com.bean.klpk.bean.PokerBean;

/**
 * Created by andy on 2017/6/9.
 * <p>
 * 这里的这个组件是将 Poker对象和PokerContainer+poker容器和poker一个隐藏属性，进行一个封装；
 * <p>
 * 这里我们将点击的状态封装到PokerGroup里面的原因在于，
 * 如果我们想换点击事件的状态的话，我们可以很轻松做到，但是如果写在PokerGroup里面的话，我们就很难实现；
 */

public class PokerGroup extends FrameLayout {

    //这个是显示的一组Poker的界面；
    private View mView;

    //扑克的容器；
    private PokerContainer mPokerContainer;
    private CheckedFrameLayout mPokerBg;
    //彩的那个图标
    private ImageView mImgCai;
    //遗漏的那个数字
    private TextView mMissNumber;


    boolean isChecked;
    private View mYiLou;

    public PokerGroup(Context context) {
        this(context, null);
    }

    public PokerGroup(Context context, AttributeSet attrs) {
        this(context, attrs, 0);
    }

    public PokerGroup(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);

        mView = View.inflate(context, R.layout.poker_group, this);

        //这里的话，我们就对下面的一个扑克进行了一个封装；这个就表示一个单位；
        mPokerContainer = ((PokerContainer) mView.findViewById(R.id.poker_container));
        mPokerBg = ((CheckedFrameLayout) mView.findViewById(R.id.poker_selected_bg));
        mImgCai = ((ImageView) mView.findViewById(R.id.iv_cai));
        mMissNumber = ((TextView) mView.findViewById(R.id.tv_text));

        mYiLou = mView.findViewById(R.id.tv_yilou);


        mPokerContainer.setOnCheckedChangeListener(new PokerContainer.OnCheckedChangeListener() {
            @Override
            public void isChecked(View view, boolean isChecked) {
                PokerGroup.this.isChecked = isChecked;
                //mPokerBg.setVisibility(isChecked?View.VISIBLE:View.INVISIBLE);
                mPokerBg.setChecked(isChecked);
                mImgCai.setVisibility(isChecked ? View.VISIBLE : View.INVISIBLE);

                if (mOnCheckedStatusChangeListener != null) {
                    mOnCheckedStatusChangeListener.onCheckedStatusChange(isChecked);
                }
            }
        });

    }

    //这里的，这个做法的原因在于我们是需要将方法暴露出去，外边需要知道；
    public interface OnCheckedStatusChangeListener {
        void onCheckedStatusChange(boolean isChecked);
    }

    public OnCheckedStatusChangeListener mOnCheckedStatusChangeListener;

    public OnCheckedStatusChangeListener getOnCheckedStatusChangeListener() {
        return mOnCheckedStatusChangeListener;
    }

    public void setOnCheckedStatusChangeListener(OnCheckedStatusChangeListener onCheckedStatusChangeListener) {
        mOnCheckedStatusChangeListener = onCheckedStatusChangeListener;
    }

    /**
     * 设置牌之间的间距；传入的值的单位是dp
     *
     * @param spacing
     */
    public void setSpacing(int spacing) {
        mPokerContainer.setSpacing(spacing);
    }



    public boolean isChecked() {
        return isChecked;
    }

    public void setChecked(boolean isChecked) {
        //改变选中的变化；
        //这里我们不需要修改这个内容，因为我们在调用mPokerContainer.setChecked(isChecked)这个方法的时候，会去触发回掉
/*        this.isChecked = isChecked;
        mPokerBg.setVisibility(isChecked?View.VISIBLE:View.INVISIBLE);
        mImgCai.setVisibility(isChecked?View.VISIBLE:View.INVISIBLE);*/
        //改变扑克的状态；
        mPokerContainer.setChecked(isChecked);
    }




    //传入数字和类型就可以了
    public void newPokers(List<PokerBean> pokerBeanList, int type) {
        mPokerContainer.setPokers(pokerBeanList, type);
    }

    /**
     * 设置遗漏数字的值的显示；
     * @param missNumber
     */
    public void setMissNumber(String missNumber){
        mMissNumber.setText(missNumber);
    }

    /**
     * 这里我们要执行的一个操作就是是否显示遗漏的数字；
     * @param isShow
     */
    public void showMissNumberVisiable(boolean isShow){
        mMissNumber.setVisibility(isShow?View.VISIBLE: View.INVISIBLE);
    }

    /**
     * 设置"遗漏"的字符串是否可以显示；
     * @param isVisiable
     */
    public void showYiLouVisiable(boolean isVisiable){
        mYiLou.setVisibility(isVisiable?View.VISIBLE:View.INVISIBLE);
    }

    /**
     * 获取遗漏显示的TextView对象
     *
     * @return
     */
    public TextView getMissNumber() {

        return mMissNumber;
    }
}
